package com.yvon.boot.mybatis;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yvon.boot.mybatis.page.ListData;
import com.yvon.boot.mybatis.search.BaseQuery;
import com.yvon.boot.mybatis.search.PageQuery;

import java.io.Serializable;
import java.util.List;


public interface IBaseService<T> extends IService<T> {

	/**
	 * 分页查询
	 *
	 * @param pageQuery 分页参数
	 * @return ListData
	 * @author : Yvon / 2021-09-03
	 */
	<D> ListData<D> page(PageQuery pageQuery);

    /**
     * 分页查询
     *
     * @param pageQuery 分页参数
     * @return ListData
     * @author : Yvon / 2021-09-03
     */
	<D> ListData<D> page(PageQuery pageQuery, Class<D> dtoClass);

    /**
     * 列表
     *
     * @param baseQuery 基本查询
     * @return {@link List}<{@link ?}>
     */
	<D> List<D> list(BaseQuery baseQuery, Class<D> dtoClass);

    /**
     * 检查是否唯一
     * <p>
     *     新增时不传id，校验范围：全部内容 <br>
     *     更新时必传id，校验范围：除当前记录为的其他内容
     * </p>
     * <p>
     *     true ：唯一，不存在重复 <br>
     *     false：不唯一，存在重复
     * </p>
     *
     * @param column 列
     * @param value  值
     * @param id     ID
     * @return boolean
     * @author : Yvon / 2021-09-14
     */
    boolean isUniqueness(String column, Object value, Serializable id);
    /**
     * 检查是否唯一
     * <p>
     *     新增时不传id，校验范围：全部内容 <br>
     *     更新时必传id，校验范围：除当前记录为的其他内容
     * </p>
     *
     * @param column  需要检验的数据库字段名
     * @param value   需要检验的值
     * @param id      ID
     * @param message 提示消息
     * @author : Yvon / 2021-09-28
     */
    void checkUniqueness(String column, Object value, Serializable id, String message);

}
